home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir42 / gnudbm14.zip / SYSTEMS.H < prev    next >
C/C++ Source or Header  |  1990-08-24  |  5KB  |  167 lines

  1. /* systems.h - Most of the system dependant code and defines are here. */
  2.  
  3. /*  This file is part of GDBM, the GNU data base manager, by Philip A. Nelson.
  4.     Copyright (C) 1990  Free Software Foundation, Inc.
  5.  
  6.     GDBM is free software; you can redistribute it and/or modify
  7.     it under the terms of the GNU General Public License as published by
  8.     the Free Software Foundation; either version 1, or (at your option)
  9.     any later version.
  10.  
  11.     GDBM is distributed in the hope that it will be useful,
  12.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.     GNU General Public License for more details.
  15.  
  16.     You should have received a copy of the GNU General Public License
  17.     along with GDBM; see the file COPYING.  If not, write to
  18.     the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19.  
  20.     You may contact the author by:
  21.        e-mail:  phil@wwu.edu
  22.       us-mail:  Philip A. Nelson
  23.                 Computer Science Department
  24.                 Western Washington University
  25.                 Bellingham, WA 98226
  26.         phone:  (206) 676-3035
  27.        
  28. *************************************************************************/
  29.  
  30. /*
  31.  * MS-DOS port (c) 1990 by Thorsten Ohl, td12@@ddagsi3.bitnet
  32.  *
  33.  * To this port, the same copying conditions apply as to the
  34.  * original release.
  35.  *
  36.  * IMPORTANT:
  37.  * This file is not identical to the original GNU release!
  38.  * You should have received this code as patch to the official
  39.  * GNU release.
  40.  *
  41.  * MORE IMPORTANT:
  42.  * This port comes with ABSOLUTELY NO WARRANTY.
  43.  *
  44.  * $Header: e:/gnu/gdbm/RCS/systems.h'v 1.4.0.1 90/08/16 09:23:07 tho Exp $
  45.  */
  46.  
  47. /* To use this file, you must have included <sys/types.h>.  */
  48.  
  49.  
  50. /*         System V changes and defines.          */
  51. /**************************************************/
  52.  
  53. #ifdef SYSV
  54.  
  55. /* File seeking needs L_SET defined .*/
  56. #ifdef MSDOS
  57. #include <malloc.h>
  58. #include <io.h>
  59. #else /* not MSDOS */
  60. #include <unistd.h>
  61. #endif /* not MSDOS */
  62. #define L_SET SEEK_SET
  63.  
  64. /* Some files need fcntl.h for locking. */
  65. #include <fcntl.h>
  66. #ifdef MSDOS
  67. #define UNLOCK_FILE(dbf)    /* later !!!  */
  68. #define READLOCK_FILE(dbf)    lock_val = 0;
  69. #define WRITELOCK_FILE(dbf)    lock_val = 0;
  70. #else /* not MSDOS */
  71. #define UNLOCK_FILE(dbf) \
  72.     {                    \
  73.       struct flock flock;            \
  74.       flock.l_type = F_UNLCK;        \
  75.       flock.l_whence = 0;            \
  76.       flock.l_start = flock.l_len = 0L;    \
  77.       fcntl (dbf->desc, F_SETLK, &flock);    \
  78.     }
  79. #define READLOCK_FILE(dbf) \
  80.     {                    \
  81.       struct flock flock;            \
  82.       flock.l_type = F_RDLCK;        \
  83.       flock.l_whence = 0;            \
  84.       flock.l_start = flock.l_len = 0L;    \
  85.       lock_val = fcntl (dbf->desc, F_SETLK, &flock);    \
  86.     }
  87. #define WRITELOCK_FILE(dbf) \
  88.     {                    \
  89.       struct flock flock;            \
  90.       flock.l_type = F_WRLCK;        \
  91.       flock.l_whence = 0;            \
  92.       flock.l_start = flock.l_len = 0L;    \
  93.       lock_val = fcntl (dbf->desc, F_SETLK, &flock);    \
  94.     }
  95. #endif /* not MSDOS */
  96.  
  97. /* Send bcmp to the right place. */
  98. #include <memory.h>
  99. #define bcmp(d1, d2, n)    memcmp(d1, d2, n)
  100. #define bcopy(d1, d2, n) memcpy(d2, d1, n)
  101.  
  102. /* Sys V does not have fsync. */
  103. #ifdef MSDOS
  104. #define fsync(f)
  105. #else /* not MSDOS */
  106. #define fsync(f) sync(); sync()
  107. #endif /* not MSDOS */
  108.  
  109. /* Stat does not have a st_blksize field. */
  110. #define STATBLKSIZE 512
  111.  
  112. /* Does not have rename(). */
  113. #ifndef MSDOS
  114. #define NEED_RENAME
  115. #endif /* not MSDOS */
  116. #endif
  117.  
  118. /*      End of System V changes and defines.      */
  119. /**************************************************/
  120.  
  121.  
  122. #ifndef MSDOS
  123. /* Alloca is builtin in gcc.  Use the builtin alloca if compiled with gcc. */
  124. #ifdef __GNUC__
  125. #define BUILTIN_ALLOCA
  126. #endif
  127.  
  128. /* Also, if this is a sun spark, use the builtin alloca. */
  129. #ifdef sun
  130. #ifdef sparc
  131. #define BUILTIN_ALLOCA
  132. #endif
  133. #endif
  134.  
  135. /* Define the proper alloca procedure. */
  136. #ifdef BUILTIN_ALLOCA
  137. #define alloca(x) __builtin_alloca(x)
  138. #else
  139. extern char *alloca();
  140. #endif
  141.  
  142. /* Malloc definition. */
  143. extern char *malloc();
  144. #endif /* not MSDOS */
  145.  
  146.  
  147. /* The BSD defines are the default defines.  If something is not
  148.    defined above in the above conditional code, it will be set
  149.    in the following code to the BSD code.  */
  150.  
  151. /* Default block size.  Some systems do not have blocksize in their
  152.    stat record. This code uses the BSD blocksize from stat. */
  153.  
  154. #ifndef STATBLKSIZE
  155. #define STATBLKSIZE file_stat.st_blksize
  156. #endif
  157.  
  158.  
  159. /* Locking is done differently on different systems.  Here is the BSD
  160.    locking routines.  */
  161.  
  162. #ifndef UNLOCK_FILE
  163. #define UNLOCK_FILE(dbf) flock (dbf->desc, LOCK_UN)
  164. #define READLOCK_FILE(dbf) lock_val = flock (dbf->desc, LOCK_SH + LOCK_NB)
  165. #define WRITELOCK_FILE(dbf) lock_val = flock (dbf->desc, LOCK_EX + LOCK_NB)
  166. #endif
  167.